package plp.expressions1.expression;


/**
* Um objeto desta classe representa uma Expressao de Subtracao.
*/
public class ExpSub extends ExpAlgebricaAbstract {

	/**
	 * Controi uma Expressao de Subtracao com as sub-expressoes especificadas.
	 * Assume-se que estas expressoes resultam em <code>ValorInteiro</code>
	 * quando avaliadas.
	 *
	 * @param esq Expressao da esquerda
	 * @param dir Expressao da direita
	 */
	public ExpSub(Expressao esq, Expressao dir) {
		super(esq, dir, "-");
	}

	/**
	 * Retorna o valor da Expressao de Subtracao.
	 */
	public Valor avaliar(){
			if (getEsq().getTipo().eReal()) {
				return new ValorReal(
						((ValorReal) getEsq().avaliar()).valor() -
						((ValorReal) getDir().avaliar()).valor() );
			}else if(getEsq().getTipo().eInteiro()){
				return new ValorInteiro(
						((ValorInteiro) getEsq().avaliar()).valor() -
						((ValorInteiro) getDir().avaliar()).valor() );
			}
			
			return null;
		}


}
